package com.huluobo.a2201mvvm_imdemo.net;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;

/**
 * Created by LC on 2024/4/8.
 * 网络工具类,可以判断当前是否有网络连接
 * 可以判断弱网环境
 */
public class NetUtils {

    private NetUtils() {

    }

    private static NetUtils netUtils;

    private static Context mContext;

    public static NetUtils getInstance(Context context) {
        if (netUtils == null) {
            netUtils = new NetUtils();
        }
        mContext = context;
        return netUtils;
    }

    /**
     * 判断当前是否有网络
     *
     * @return true 有网, false 没网
     */
    public boolean isConnected() {
        //获取网络连接管理器
        ConnectivityManager connectivityManager =
                (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
        //拿到当前的网络信息
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        //判断当前是否有网络信息(有就是有网,没有就没网),并且判断当前网络撞他是否已经连接或者正在连接中
        return networkInfo != null && networkInfo.isConnectedOrConnecting();
    }

    /**
     * 判断当是否处于弱网状态
     *
     * @return true 处于弱网状态,false 非弱网状态
     */
    public boolean isSlowlyNetwork() {
        //获取网络连接管理器
        ConnectivityManager connectivityManager =
                (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
        //获取网络流量能力管理器,参数,当前活跃的网络
        NetworkCapabilities networkCapabilities =
                connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());

        //判断当前网络是否处于蜂窝网络(2G 3G 4G 5G )
        if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
            if (networkCapabilities.getLinkUpstreamBandwidthKbps() > 100 && networkCapabilities.getLinkDownstreamBandwidthKbps() > 100) {
                //如果大于100k/s 证明不是一个弱网状态
                return false;
            } else {
                //如果小于100k/s 证明是一个弱网状态
                return true;
            }
        }
        return false;
    }

}
